package com.rayboo.example.random;

import lombok.extern.slf4j.Slf4j;

import java.util.Random;
import java.util.UUID;

/**
 * 生成短八位的UUID
 */
@Slf4j
public class ShortUUID {

    private static String[] chars = new String[]{"a", "b", "c", "d", "e", "f",
            "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s",
            "t", "u", "v", "w", "x", "y", "z", "0", "1", "2", "3", "4", "5",
            "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "I",
            "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V",
            "W", "X", "Y", "Z"};

    /**
     * 生成短八位的UUID
     *
     * @return 短八位的UUID
     */
    public static String generateShortUUID() {
        StringBuffer shortBuffer = new StringBuffer();
        String uuid = UUID.randomUUID().toString().replace("-", "");
        for (int i = 0; i < 8; i++) {
            String str = uuid.substring(i * 4, i * 4 + 4);
            int x = Integer.parseInt(str, 16);
            shortBuffer.append(chars[x % 0x3E]);
        }
        return shortBuffer.toString();
    }

    /**
     * 生成八位UUID
     *
     * @return 短八位UUID
     */
    public static String genShortUUID() {
        StringBuffer shortBuffer = new StringBuffer();
        String uuid = UUID.randomUUID().toString().replace("-", "");
        for (int i = 0; i < 8; i++) {
            String str = uuid.substring(i * 4, i * 4 + 4);
            int x = Integer.parseInt(str, 16);
            // 如果是 chars62,则是x%62
            shortBuffer.append(chars[x % 62]);
        }
        return shortBuffer.toString();
    }

    /**
     * 生成八位唯一标识
     *
     * @return 八位标识
     */
    public static String genRandomStr() {
        int maxNum = 62;
        int i;
        int count = 0;
        StringBuffer stringBuffer = new StringBuffer("");
        Random r = new Random();
        while (count < 8) {
            i = Math.abs(r.nextInt(maxNum));
            if (i >= 0 && i < chars.length) {
                stringBuffer.append(chars[i]);
                count++;
            }
        }
        return stringBuffer.toString();
    }


    public static void main(String[] args) {
        System.out.println(generateShortUUID());

        System.out.println(genShortUUID());

        System.out.println(genRandomStr());
    }

}
